/**
	* Copyright (c) minuteproject, minuteproject@gmail.com
	* All rights reserved.
	* 
	* Licensed under the Apache License, Version 2.0 (the "License")
	* you may not use this file except in compliance with the License.
	* You may obtain a copy of the License at
	* 
	* http://www.apache.org/licenses/LICENSE-2.0
	* 
	* Unless required by applicable law or agreed to in writing, software
	* distributed under the License is distributed on an "AS IS" BASIS,
	* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	* See the License for the specific language governing permissions and
	* limitations under the License.
	* 
	* More information on minuteproject:
	* twitter @minuteproject
	* wiki http://minuteproject.wikispaces.com 
	* blog http://minuteproject.blogspot.net
	* 
*/
/**
	* template reference : 
	* - name : OpenxavaDomainObjectUML
	* - file name : DomainObjectUMLJPAAnnotationOXAnnotationV4.vm
*/
package sistema_oficial.sistema_oficial.domain.sistemaoficial;

//MP-MANAGED-ADDED-AREA-BEGINNING @import@
//MP-MANAGED-ADDED-AREA-ENDING @import@
import java.sql.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;

import javax.persistence.*;
import org.openxava.annotations.*;

import sistema_oficial.sistema_oficial.domain.sistemaoficial.BienServicio;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleEmpaqueUsado;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleEntraNivel0Normal;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleLoteEmpaqueUsadoNivel5;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleSaleForzadoEmpaqueNivel3;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleSaleForzadoNivel0;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleTransferidoNivel3Nivel0;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.Medida;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.SubcuentaMayor;

/**
 *
 * <p>Title: Empaque</p>
 *
 * <p>Description: Domain Object describing a Empaque entity</p>
 *
 */
@Entity (name="Empaque")
@Table (name="empaque")
@Views({
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @view-base-empaque@
	@View(
		name="base",
		members=
        "" 	
        + "identificador  ; "
        + "descripcion  ; "
        + "codigo  ; "
        + "existenciaMinima  ; "
        + "medidaIdentificador  ; "
        + "subcuentaMayorCodigo  ; "
		),
//MP-MANAGED-UPDATABLE-ENDING
	@View(
		name="Create", 
		extendsView="base"
	),
	@View(
		name="Update", 
		extendsView="base",
        members=
          "" 	
	    + "bienServicio { bienServicioEmpaqueViaEmpaqueIdentificador };" 
	    + "detalleEmpaqueUsado { detalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador };" 
	    + "detalleEntraNivel0Normal { detalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador };" 
	    + "detalleLoteEmpaqueUsadoNivel5 { detalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador };" 
	    + "detalleSaleForzadoEmpaqueNivel3 { detalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador };" 
	    + "detalleSaleForzadoNivel0 { detalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador };" 
	    + "detalleTransferidoNivel3Nivel0 { detalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador };" 
	),
	@View(extendsView="base",
        members=
          "" 	
	    ),
    @View(name="empaqueDEFAULT_VIEW", 
	   members=
          " identificador ;" 	
        + "descripcion  ; "
        + "codigo  ; "
        + "existenciaMinima  ; "
	),
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @view-reference-empaque@
    @View(name="reference", 
       extendsView="empaqueDEFAULT_VIEW"
//MP-MANAGED-UPDATABLE-ENDING
    )
})

@Tabs({
@Tab(
properties=
     " descripcion "
    +",  codigo "
    +",  existenciaMinima "
)
,
@Tab(
name = "EmpaqueTab",
properties=
     " descripcion "
    +",  codigo "
    +",  existenciaMinima "
)
,
@Tab(
name = "EmpaqueTabWithRef",
properties=
     " descripcion "
    +",  codigo "
    +",  existenciaMinima "
)
})
//MP-MANAGED-ADDED-AREA-BEGINNING @class-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @class-annotation@
public class Empaque {

    @Hidden @Id @Column(name="identificador" )
    private Integer identificador; 

//MP-MANAGED-ADDED-AREA-BEGINNING @descripcion-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @descripcion-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-descripcion@
    @Column(name="descripcion",  length=100, nullable=false,  unique=false)
    @Required
    private String descripcion;	
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-ADDED-AREA-BEGINNING @codigo-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @codigo-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-codigo@
    @Column(name="codigo",  length=50, nullable=false,  unique=false)
    @Required
    private String codigo;	
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-ADDED-AREA-BEGINNING @existencia_minima-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @existencia_minima-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-existencia_minima@
    @Column(name="existencia_minima",   nullable=false,  unique=false)
    @Required
    private java.math.BigDecimal existenciaMinima;	
//MP-MANAGED-UPDATABLE-ENDING


//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @parent-Medida-empaque@
    @ManyToOne (fetch=FetchType.LAZY ,optional=false) //remove optional=false to aggragate but leads to a side effect when going directly to the entity: required check is not performed=> if no set DB check constraint is raised...
    @JoinColumn(name="medida_identificador", nullable=false,  unique=false  )
    @ReferenceView ("reference") 
    private Medida medidaIdentificador; 
    
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @parent-SubcuentaMayor-empaque@
    @ManyToOne (fetch=FetchType.LAZY ,optional=false) //remove optional=false to aggragate but leads to a side effect when going directly to the entity: required check is not performed=> if no set DB check constraint is raised...
    @JoinColumn(name="subcuenta_mayor_codigo", nullable=false,  unique=false  )
    @ReferenceView ("reference") 
    private SubcuentaMayor subcuentaMayorCodigo; 
    
//MP-MANAGED-UPDATABLE-ENDING
//children
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-bienServicioEmpaqueViaEmpaqueIdentificador-empaque@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.BienServicio.class, fetch=FetchType.LAZY, mappedBy="empaqueIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <BienServicio> bienServicioEmpaqueViaEmpaqueIdentificador = new HashSet<BienServicio>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-detalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador-empaque@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleEmpaqueUsado.class, fetch=FetchType.LAZY, mappedBy="empaqueIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <DetalleEmpaqueUsado> detalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador = new HashSet<DetalleEmpaqueUsado>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-detalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador-empaque@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleEntraNivel0Normal.class, fetch=FetchType.LAZY, mappedBy="empaqueIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <DetalleEntraNivel0Normal> detalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador = new HashSet<DetalleEntraNivel0Normal>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-detalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador-empaque@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleLoteEmpaqueUsadoNivel5.class, fetch=FetchType.LAZY, mappedBy="empaqueIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <DetalleLoteEmpaqueUsadoNivel5> detalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador = new HashSet<DetalleLoteEmpaqueUsadoNivel5>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-detalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador-empaque@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleSaleForzadoEmpaqueNivel3.class, fetch=FetchType.LAZY, mappedBy="empaqueIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <DetalleSaleForzadoEmpaqueNivel3> detalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador = new HashSet<DetalleSaleForzadoEmpaqueNivel3>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-detalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador-empaque@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleSaleForzadoNivel0.class, fetch=FetchType.LAZY, mappedBy="empaqueIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <DetalleSaleForzadoNivel0> detalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador = new HashSet<DetalleSaleForzadoNivel0>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-detalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador-empaque@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.DetalleTransferidoNivel3Nivel0.class, fetch=FetchType.LAZY, mappedBy="empaqueIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <DetalleTransferidoNivel3Nivel0> detalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador = new HashSet<DetalleTransferidoNivel3Nivel0>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//m2m
    /**
    * Default constructor
    */
    public Empaque() {
    }


    public Integer getIdentificador() {
        return identificador;
    }
	
    public void setIdentificador (Integer identificador) {
        this.identificador =  identificador;
    }
    

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-descripcion@
    public String getDescripcion() {
        return descripcion;
    }
	
    public void setDescripcion (String descripcion) {
        this.descripcion =  descripcion;
    } 
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-codigo@
    public String getCodigo() {
        return codigo;
    }
	
    public void setCodigo (String codigo) {
        this.codigo =  codigo;
    } 
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-existencia_minima@
    public java.math.BigDecimal getExistenciaMinima() {
        return existenciaMinima;
    }
	
    public void setExistenciaMinima (java.math.BigDecimal existenciaMinima) {
        this.existenciaMinima =  existenciaMinima;
    } 
//MP-MANAGED-UPDATABLE-ENDING


    public Medida getMedidaIdentificador () {  //
    	return medidaIdentificador;
    }
	
    public void setMedidaIdentificador (Medida medidaIdentificador) {
    	this.medidaIdentificador = medidaIdentificador;//this.medidaIdentificador = medida;
    }
    public SubcuentaMayor getSubcuentaMayorCodigo () {  //
    	return subcuentaMayorCodigo;
    }
	
    public void setSubcuentaMayorCodigo (SubcuentaMayor subcuentaMayorCodigo) {
    	this.subcuentaMayorCodigo = subcuentaMayorCodigo;//this.subcuentaMayorCodigo = subcuentaMayor;
    }

    public Set<BienServicio> getBienServicioEmpaqueViaEmpaqueIdentificador() {
        if (bienServicioEmpaqueViaEmpaqueIdentificador == null){
            bienServicioEmpaqueViaEmpaqueIdentificador = new HashSet<BienServicio>();
        }
        return bienServicioEmpaqueViaEmpaqueIdentificador;
    }

    public void setBienServicioEmpaqueViaEmpaqueIdentificador (Set<BienServicio> bienServicioEmpaqueViaEmpaqueIdentificador) {
        this.bienServicioEmpaqueViaEmpaqueIdentificador = bienServicioEmpaqueViaEmpaqueIdentificador;
    }	
    
    public void addBienServicioEmpaqueViaEmpaqueIdentificador (BienServicio bienServicio) {
    	    getBienServicioEmpaqueViaEmpaqueIdentificador().add(bienServicio);
    }
    
    public Set<DetalleEmpaqueUsado> getDetalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador() {
        if (detalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador == null){
            detalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador = new HashSet<DetalleEmpaqueUsado>();
        }
        return detalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador;
    }

    public void setDetalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador (Set<DetalleEmpaqueUsado> detalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador) {
        this.detalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador = detalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador;
    }	
    
    public void addDetalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador (DetalleEmpaqueUsado detalleEmpaqueUsado) {
    	    getDetalleEmpaqueUsadoEmpaqueViaEmpaqueIdentificador().add(detalleEmpaqueUsado);
    }
    
    public Set<DetalleEntraNivel0Normal> getDetalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador() {
        if (detalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador == null){
            detalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador = new HashSet<DetalleEntraNivel0Normal>();
        }
        return detalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador;
    }

    public void setDetalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador (Set<DetalleEntraNivel0Normal> detalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador) {
        this.detalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador = detalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador;
    }	
    
    public void addDetalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador (DetalleEntraNivel0Normal detalleEntraNivel0Normal) {
    	    getDetalleEntraNivel0NormalEmpaqueViaEmpaqueIdentificador().add(detalleEntraNivel0Normal);
    }
    
    public Set<DetalleLoteEmpaqueUsadoNivel5> getDetalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador() {
        if (detalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador == null){
            detalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador = new HashSet<DetalleLoteEmpaqueUsadoNivel5>();
        }
        return detalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador;
    }

    public void setDetalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador (Set<DetalleLoteEmpaqueUsadoNivel5> detalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador) {
        this.detalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador = detalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador;
    }	
    
    public void addDetalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador (DetalleLoteEmpaqueUsadoNivel5 detalleLoteEmpaqueUsadoNivel5) {
    	    getDetalleLoteEmpaqueUsadoNivel5EmpaqueViaEmpaqueIdentificador().add(detalleLoteEmpaqueUsadoNivel5);
    }
    
    public Set<DetalleSaleForzadoEmpaqueNivel3> getDetalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador() {
        if (detalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador == null){
            detalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador = new HashSet<DetalleSaleForzadoEmpaqueNivel3>();
        }
        return detalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador;
    }

    public void setDetalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador (Set<DetalleSaleForzadoEmpaqueNivel3> detalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador) {
        this.detalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador = detalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador;
    }	
    
    public void addDetalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador (DetalleSaleForzadoEmpaqueNivel3 detalleSaleForzadoEmpaqueNivel3) {
    	    getDetalleSaleForzadoEmpaqueNivel3EmpaqueViaEmpaqueIdentificador().add(detalleSaleForzadoEmpaqueNivel3);
    }
    
    public Set<DetalleSaleForzadoNivel0> getDetalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador() {
        if (detalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador == null){
            detalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador = new HashSet<DetalleSaleForzadoNivel0>();
        }
        return detalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador;
    }

    public void setDetalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador (Set<DetalleSaleForzadoNivel0> detalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador) {
        this.detalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador = detalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador;
    }	
    
    public void addDetalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador (DetalleSaleForzadoNivel0 detalleSaleForzadoNivel0) {
    	    getDetalleSaleForzadoNivel0EmpaqueViaEmpaqueIdentificador().add(detalleSaleForzadoNivel0);
    }
    
    public Set<DetalleTransferidoNivel3Nivel0> getDetalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador() {
        if (detalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador == null){
            detalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador = new HashSet<DetalleTransferidoNivel3Nivel0>();
        }
        return detalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador;
    }

    public void setDetalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador (Set<DetalleTransferidoNivel3Nivel0> detalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador) {
        this.detalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador = detalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador;
    }	
    
    public void addDetalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador (DetalleTransferidoNivel3Nivel0 detalleTransferidoNivel3Nivel0) {
    	    getDetalleTransferidoNivel3Nivel0EmpaqueViaEmpaqueIdentificador().add(detalleTransferidoNivel3Nivel0);
    }
    



//MP-MANAGED-ADDED-AREA-BEGINNING @implementation@
//MP-MANAGED-ADDED-AREA-ENDING @implementation@

}
